package com.edu.exam.entity.classmanagement.teaching;

/**
 * 学生名单状态枚举
 * [所属模块] F-06 教学班管理模块
 *
 * 定义学生在教学班中的参与状态。
 * 根据简化后的F-06模块设计，只保留2个核心状态。
 *
 * @author System
 * @version 3.0.0 (简化版)
 */
public enum StudentRosterStatus {

    /**
     * 在读状态
     * 学生正常参与教学班的学习活动
     */
    ACTIVE("ACTIVE", "在读"),

    /**
     * 非在读状态
     * 学生已不在教学班中学习（包括转出、退课、完成等）
     */
    INACTIVE("INACTIVE", "非在读");

    private final String code;
    private final String description;

    StudentRosterStatus(String code, String description) {
        this.code = code;
        this.description = description;
    }

    public String getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }

    /**
     * 判断是否为在读状态
     */
    public boolean isActive() {
        return this == ACTIVE;
    }

    /**
     * 判断是否为非在读状态
     */
    public boolean isInactive() {
        return this == INACTIVE;
    }

    /**
     * 根据代码获取枚举
     */
    public static StudentRosterStatus fromCode(String code) {
        for (StudentRosterStatus status : values()) {
            if (status.getCode().equals(code)) {
                return status;
            }
        }
        throw new IllegalArgumentException("Unknown student roster status code: " + code);
    }

    /**
     * 根据代码获取枚举，支持null
     */
    public static StudentRosterStatus fromCode(String code, StudentRosterStatus defaultValue) {
        if (code == null || code.trim().isEmpty()) {
            return defaultValue;
        }
        try {
            return fromCode(code);
        } catch (IllegalArgumentException e) {
            return defaultValue;
        }
    }

    @Override
    public String toString() {
        return this.code + "(" + this.description + ")";
    }
}